package com.codebuffer;

import java.text.NumberFormat;
import java.util.regex.Pattern;

public class IsNumeric {

    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     *
     * @param str string字符串
     * @return bool布尔型
     */
    public boolean isNumeric1 (String str) {
        // write code here
//        ^表示开头 $ 表示结尾  java中两个\\ 代表一个\
//        * 零次或多次匹配前面的字符或子表达式
//        ？零次或一次匹配前面的字符或子表达式
//        + 一次或多次匹配前面的字符或子表达式
//        [] 字符集。匹配包含的任一字符
//        (:? )匹配 pattern 但不捕获该匹配的子表达式，即它是一个非捕获匹配
        String p = "^[+-]?(\\d*\\.?\\d+|\\d+\\.?\\d*)([eE][+-]?\\d+)?$";
        return Pattern.matches(p,str);
    }

    public static boolean isNumeric (String str) {
        String s = str.toLowerCase();
        //判断是否出现过数字
        boolean num = false;
        //判断是否出现过e
        boolean e = false;
        //判断是否出现过.
        boolean p = false;
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i)=='+'||s.charAt(i)=='-'){
                //符号不在第一位或者e的后面
                if(i!=0 && s.charAt(i-1) !='e'){
                    return false;
                }
            }else if(s.charAt(i)=='.'){
                //小数点出现过或者再e的后面
                if(e || p){
                    return false;
                }
                p = true;
            }else if(s.charAt(i) =='e'){
                //出现过e或者e前面没有数字
                if(e || !num){
                    return false;
                }
                e = true;
                num = false;
            }else {
                if(s.charAt(i)<'0'||s.charAt(i)>'9'){
                    return false;
                }
                //出现过数字
                if(!num){
                    num = true;
                }
            }
        }
        return num;
    }

    public static void main(String[] args) {
        System.out.println(isNumeric("."));
    }


}
